Video games allow users to experience rich virtual environments spanning any number of settings and contexts. These virtual environments may be rendered and displayed using three-dimensional graphics hardware, such as a dedicated graphical processing unit (GPU). However, the detail of these virtual environments has always been limited by the state of computer graphics hardware and practical expectations. When determining an appropriate level of detail and realism to use in implementing the virtual environment, game developers consider the capabilities of the hardware that will run the video game as well as user expectations regarding performance. This usually results in a balance between rendering a suitable level of detail while still maintaining an acceptable frame rate. As new hardware and techniques become available, video games may present ever more detailed and realistic environments.
In video games taking place on or near a body of water, such as the sea, the surface of the water and related details are among the most prominent elements for the emotional and visual impact of the virtual environment and associated game play. Water has traditionally been recognized as one of the more difficult features to render in virtual environments. Unlike land and other objects, water (and other fluids) behaves as a dynamic volumetric entity. Accurate depiction may require frame-by-frame calculation of changes in the water's surface. Further, water is generally transparent and realistic depiction of water may require complex calculations relating to the interaction of light with the surface of water in the form of reflections, refraction, and shadows. It is difficult to achieve realistic quality and suitable performance simultaneously in water visualization due to complicated optical effects and dynamic variability. However, modern gamers demand increasingly detailed virtual environments but are not willing to sacrifice performance.
Existing methods for visualizing waves on water surfaces suffer from various problems resulting in a lack of wave texture detail at distance, instability of polygonal mesh when the observer is moving, and unrealistic optical effects. One wave rendering method is the Projected Grid method described by Claes Johanson in “Real-time Water Rendering: Introducing the Projected Grid Concept,” [Lund University, 2004], the content of which is incorporated herein by reference. The Projected Grid method takes a uniform grid at the observer's location and projects it along the camera's view to a base plane of the water surface. This grid is then adjusted based on a height field associated with the water surface to generate a polygonal mesh approximating the water surface. However, the Projected Grid method does not provide good detail of waves at distances far from the observer and does not offer stability when the observer point is moving. Further, the Projected Grid method does not adapt a detalization level to allow high quality rendering of dynamic water deformation.
Another complication is the wide range of computer graphics hardware available to gamers and other end-users. To appeal to a broader market, video games are often designed to run on many different hardware configurations having varied capabilities. Developers may choose to implement certain techniques when the user has a high-end GPU and use other, less advanced, techniques when the user has a lower-end GPU (or has selected a corresponding graphics setting preset, for example). Existing implementations often use different techniques for low- and high-end graphics presets. They may also use different techniques for regions that are near and far from the viewpoint. For example, one technique that may be used in high-end graphical presets is Fast Fourier Transform wave synthesis based on oceanographic statistics for surface wave models. However, this model does not provide sufficient quality for low-end GPUs (at suitable performance levels). Games using this technique usually implement another technique for low-end GPUs and for points at greater distances from the observer. This requires additional synchronization of different content for various views and hardware configurations. Mixing techniques and utilizing different rendering processes for high and low end GPUs may result in additional complexity of the game software and may present synchronization issues, raising the cost of content production for the game developer.
Existing methods may render objects in the virtual environment by projecting polygonal approximations of the surfaces of the objects into a 2D display. However, using such techniques it may be difficult to achieve high quality polygonal approximation of the water surface in real time because it requires extremely tiny polygons (which are difficult to process on current hardware). Further, existing techniques may not be flexible to adapt to rapid and dynamic changes of the water surface. Accordingly, there exists a need for improved techniques that provide high-quality and realistic rendering of water surfaces in virtual environments but are able to still provide suitable performance on both high- and low-end GPUs.